<?php

/**
  @author: Raj Trivedi (India), 2009-10-14
  @modify: Taylor Lopes (Brazil), 2012-04-06
 */
class BarCode {

    private $file;
    private $into;
    private $digitArray = array(0 => "00110", 1 => "10001", 2 => "01001", 3 => "11000", 4 => "00101", 5 => "10100", 6 => "01100", 7 => "00011", 8 => "10010", 9 => "01010");

    function __construct($value, $into = 1, $filename = 'barcode.gif', $width_bar = 300, $height_bar = 65, $show_codebar = false) {

        $lower = 1;
        $hight = 50;
        $this->into = $into;
        $this->file = $filename;
        for ($count1 = 9; $count1 >= 0; $count1--) {
            for ($count2 = 9; $count2 >= 0; $count2--) {
                $count = ($count1 * 10) + $count2;
                $text = "";
                for ($i = 1; $i < 6; $i++) {
                    $text .= substr($this->digitArray[$count1], ($i - 1), 1) . substr($this->digitArray[$count2], ($i - 1), 1);
                }
                $this->digitArray[$count] = $text;
            }
        }


        $height_bar_max = $height_bar;
        $width_bar_max = $width_bar;

        $img = imagecreate($width_bar_max, $height_bar_max);
        if ($show_codebar) {
            $height_bar -= 25;
        }

        $cl_black = imagecolorallocate($img, 0, 0, 0);
        $cl_white = imagecolorallocate($img, 255, 255, 255);

        #imagefilledrectangle($img, 0, 0, $lower*95+1000, $hight+300, $cl_white);
        imagefilledrectangle($img, 0, 0, $width_bar_max, $height_bar_max, $cl_white);
        imagefilledrectangle($img, 5, 5, 5, $height_bar, $cl_black);
        imagefilledrectangle($img, 6, 5, 6, $height_bar, $cl_white);
        imagefilledrectangle($img, 7, 5, 7, $height_bar, $cl_black);
        imagefilledrectangle($img, 8, 5, 8, $height_bar, $cl_white);
        $thin = 1;
        if (substr_count(strtoupper($_SERVER['SERVER_SOFTWARE']), "WIN32")) {
            $wide = 3;
        } else {
            $wide = 2.72;
        }
        $pos = 9;
        $text = $value;
        if ((strlen($text) % 2) <> 0) {
            $text = "0" . $text;
        }


        while (strlen($text) > 0) {
            $i = round($this->JSK_left($text, 2));
            $text = $this->JSK_right($text, strlen($text) - 2);

            $f = $this->digitArray[$i];

            for ($i = 1; $i < 11; $i+=2) {
                if (substr($f, ($i - 1), 1) == "0") {
                    $f1 = $thin;
                } else {
                    $f1 = $wide;
                }
                imagefilledrectangle($img, $pos, 5, $pos - 1 + $f1, $height_bar, $cl_black);
                $pos = $pos + $f1;

                if (substr($f, $i, 1) == "0") {
                    $f2 = $thin;
                } else {
                    $f2 = $wide;
                }
                imagefilledrectangle($img, $pos, 5, $pos - 1 + $f2, $height_bar, $cl_white);
                $pos = $pos + $f2;
            }
        }
        imagefilledrectangle($img, $pos, 5, $pos - 1 + $wide, $height_bar, $cl_black);
        $pos = $pos + $wide;

        imagefilledrectangle($img, $pos, 5, $pos - 1 + $thin, $height_bar, $cl_white);
        $pos = $pos + $thin;


        imagefilledrectangle($img, $pos, 5, $pos - 1 + $thin, $height_bar, $cl_black);
        $pos = $pos + $thin;

        if ($show_codebar) {
            imagestring($img, 5, 0, $height_bar + 5, " " . $value, imagecolorallocate($img, 0, 0, 0));
        }

        $this->put_img($img);
    }

    function JSK_left($input, $comp) {
        return substr($input, 0, $comp);
    }

    function JSK_right($input, $comp) {
        return substr($input, strlen($input) - $comp, $comp);
    }

    function put_img($image, $file = 'test.gif') {
        morra($this);
        if ($this->into) {
            imagegif($image, $this->file);
        } else {
            header("Content-type: image/gif");
            imagegif($image);
        }
        imagedestroy($image);
    }

}

?>